#include <linux/init.h>
#include <linux/module.h>
#include <linux/cdev.h>

static int major = 250; // 主设备号 高 12位
static int minor = 0;   // 次设备号 低 20位
static dev_t devno;     // 设备号

static int hello_init(void)
{
    int err;
    printk("Hello, world\n");
    /*****   静态 设备注册   ****/
    devno = MKDEV(major,minor); // 构建 设备号
    // 静态申请 设备             设备号 - 数量 - 设备名
    err = register_chrdev_region(devno, 1, "hello");
    if(err < 0)
    {
        printk("register_chrdev_region fail \n");
        return err;
    }
    // 建立 cdev与 ops的 联系
    cdev_init(pcdev,&hello_ops);
    // 注册 设备 
    err = cdev_add(pcdev,devno,1);
    if(err < 0)
    {
        printk("cdev_add fail \n");
        return err;
    }
    return 0;
}

static void hello_exit(void)
{
    //  注销 设备
	cdev_del(pcdev);
	unregister_chrdev_region(devno,1);
	printk("Goodbye, cruel world\n");
}
MODULE_LICENSE("GPL");
module_init(hello_init);
module_exit(hello_exit);
